home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
TC_TSR10.ARJ
/
PRTSC.TXT
< prev
next >
Wrap
Text File
|
1991-06-18
|
4KB
|
92 lines
TsrPrtSc.C, PrtSc.C, PrtSc.H
Here is some documentation I wrote some time ago. Hope it's useful, but,
The author shall not be liable to the user for any direct, indirect or
consequential loss arising from the use of, or inability to use, any
program or file howsoever caused. No warranty is given that the programs
will work under all circumstances.
Sherif
/*--------------------------------------------------------------------------*
| Sherif El-Kassas . :. |
| EB dept \_____o__/ __________ |
| Eindhoven U of Tec .. / |
| The Netherlands / Email: elkassas@eb.ele.tue.nl |
*--------------------------------------------------------------------------*/
A PRINT SCREEN UTILITY
One of the annoying things about printing screens, is that you always get a
copy of the whole screen including things you don't want to print, such as
your word processor's status line, the DOS prompt, ...etc.
PrtSc is a memory resident utility - written in Turbo C - that enables you to
select the screen area you really want to print.
PREPARING PrtSC
Compile using:
C> TCC -mt PrtSc.C TsrPrtSc.C
Then type PrtSc and press enter to load the program into your computer's
memory.
USING PrtSc
When you want to call PrtSc press the ALT and PrtSc keys [actually the '*' key
on the right keypad] simultaneously, a white block style cursor will appear at
the upper left corner of the screen.
Use the arrow and cursor movement keys to move the cursor to the beginning of
the screen area you want to print and press enter. Move the cursor to the end
of the block to be printed (a rubber band box will appear as you move around
to help you identify the area to be printed ) and press the enter key once
more. The block enclosed by the rubber band is the printer.
HOW PrtSc WORKS
o INSTALLING IN MEMORY
When you run PrtSc it will first initialize some internal variables and system
pointers and then it simply terminates and returns control back to DOS,
however it returns control to DOS using a special DOS function, interrupt 0x21
function 0x31 KEEP PROCESS (we could also use interrupt 0x27 TERMINATE BUT
STAY RESIDENT). Function 0x31 instructs DOS to terminate the current process
but without reallocating it's memory. Therefor the terminated program has
become a part of DOS.
o POPPING UP
Making the program memory resident is not enough, the resident program must be
able to regain control. In our case this is done by checking all the incoming
key strokes until a special key combination is pressed (ALT-PrtSc) to trigger
program action. Checking the incoming key strokes is done by taking over the
keyboard interrupt.
One of the problems we face here is that the DOS services provided throw
interrupt 0x21 are not re-entrant, which means that we can't use any DOS
functions (file I/O ..etc) from within the resident program unless we are sure
that DOS is inactive. As it happens DOS maintains a special flag (the BUSY
FLAG) that indicates whether or not a DOS routine is currently active. So
before popping up, the resident utility should check the BUSY FLAG to make
sure that it's safe to use DOS functions. Another undocumented DOS feature is
interrupt 0x28. Interrupt 0x28 is called from DOS functions (e.g when function
0x0A is waiting for a key stoke) and the interesting thing is that during a
call to interrupt 0x28 it is safe to use DOS functions higher than 0x0C.
So PrtSc monitors the keyboard until the ALT and PrtSc keys are pressed, if
DOS is inactive the program is activated otherwise it waits for a call to
interrupt 0x28.
[ Note: this program performs direct video access without attempting to
synchronize with vertical/horizontal retrace. So if you have a CGA you
will probably get lots of snow. I think the simplest way to fix this is
to use the screen access routines found in conio.h (this program was
first written using an pre conio.h version of Turbo C).
]